home *** CD-ROM | disk | FTP | other *** search
/ The Programmer Disk / The Programmer Disk (Microforum).iso / xpro / pascal2 / pro7 / split.pas < prev    next >
Pascal/Delphi Source File  |  1986-08-04  |  3KB  |  84 lines

  1. {TITLE: Split file utility}
  2. program Split;
  3.  
  4. const
  5.   RecSize = 128; {Default block read/write size}
  6.   BufSize = 384;
  7.  
  8. var
  9.   InFile, OutFile: File;
  10.   Buffer: array [1..RecSize, 1..BufSize] of byte;
  11.   InputSize, OutputSize, Count, i, RecsRead: integer;
  12.   Extension: string [3];
  13.   FileName: string [253]; {Enough space for a pathname}
  14.  
  15. label
  16.   8000, 8500, 8700, 9000;
  17.  
  18. {*********************************************************************}
  19. {* Split reads a file (first parameter) of arbitrary size and writes *}
  20. {* it out to one or more files (second parameter).  The first output *}
  21. {* file has the extension '.001'.  A maximum of 48Kbytes are written *}
  22. {* to the output file.  When that size is reached the output file is *}
  23. {* closed, the extension is incremented, and then the output file is *}
  24. {* re-opened. Only the last file written will have a size other than *}
  25. {* 49152 bytes.  As each output file is closed, the name and size of *}
  26. {* the file is written to the screen. When the end of the input file *}
  27. {* is reached, the name and size of the input file is written to the *}
  28. {* screen.  This program is in the public domain. Written June 86 by *}
  29. {* David G. Holm (Bix id 'dgh', Genie id 'DHOLM', Plink id 'OLS185') *}
  30. {*********************************************************************}
  31.  
  32. begin
  33.   InputSize := 0;
  34.   OutputSize := 0;
  35.   if paramcount > 0 then begin
  36.     assign (InFile, paramstr (1));
  37.     reset (InFile);
  38.     if paramcount > 1 then begin
  39.       FileName := paramstr (2) + '.';
  40.       if pos ('.', FileName) < length (FileName)
  41.       then goto 8700;
  42.       Count := 1;
  43.       Extension := '001';
  44.       assign (OutFile, FileName + Extension);
  45.       rewrite (OutFile);
  46.     end
  47.     else goto 8500;
  48.   end
  49.   else goto 8000;
  50.   repeat {until eof...}
  51.     repeat {until OutputSize...}
  52.       blockread (InFile, Buffer, BufSize, RecsRead);
  53.       InputSize := InputSize + RecsRead;
  54.       blockwrite (OutFile, Buffer, RecsRead);
  55.       OutputSize := OutputSize + RecsRead;
  56.     until (OutputSize >= BufSize) or eof (InFile);
  57.     close (OutFile);
  58.     writeln (int (OutputSize) * int (RecSize):1:0, ' bytes written to ',
  59.              Filename, Extension, '.');
  60.     if not eof (InFile)
  61.     then begin
  62.       OutputSize := 0;
  63.       Count := Count + 1;
  64.       str (Count:3, Extension);
  65.       for i := 1 to 3 do
  66.       if Extension [i] = ' '
  67.       then Extension [i] := '0';
  68.       assign (OutFile, FileName + Extension);
  69.       rewrite (OutFile);
  70.     end;
  71.   until eof (InFile);
  72.   writeln (int (InputSize) * int (RecSize):1:0, ' bytes read from ',
  73.            paramstr(1), '.');
  74.   goto 9000;
  75.   8000:
  76.   writeln ('No input file specified.');
  77.   8500:
  78.   writeln ('No output file specified.');
  79.   goto 9000;
  80.   8700:
  81.   writeln ('Extension may not be specified on output file.');
  82.   9000:
  83. end.
  84.